package com.github.jarlakxen.scala.sbt.wizard.create; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.WizardNewProjectCreationPage; import com.github.jarlakxen.scala.sbt.SbtVersion; import com.github.jarlakxen.scala.sbt.ScalaVersion; import com.github.jarlakxen.scala.sbt.configurations.CreateSbtProjectConfiguration; import com.github.jarlakxen.scala.sbt.util.UIUtil; /** * WizardPage for configuring SBT project information. * * @see SbtWizard * @author Facundo Viale */ public class SbtProjectWizardPage extends WizardPage { private CreateSbtProjectConfiguration configuration; private WizardNewProjectCreationPage mainPage; private List<Button> sbtRadioButtons; private Combo scalaVersion; private Text organization; private Text projectName; private Text productVersion; public SbtProjectWizardPage(WizardNewProjectCreationPage mainPage, CreateSbtProjectConfiguration configuration) { super("SBTProjectWizardPage"); this.configuration = configuration; this.mainPage = mainPage; } @Override public void createControl(Composite parent) { setTitle("SBT Project Information"); setDescription("Input SBT Project Information."); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout(2, false)); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); UIUtil.createLabel(composite, "SBT Version:"); createSbtSelectorPanel(composite); UIUtil.createLabel(composite, "Scala Version:"); scalaVersion = new Combo(composite, SWT.DROP_DOWN); for(ScalaVersion version : ScalaVersion.values()){ scalaVersion.add(version.getText()); } scalaVersion.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String selectedValue = scalaVersion.getItem(scalaVersion.getSelectionIndex()); configuration.setScalaVersion(ScalaVersion.versionOf(selectedValue)); } }); scalaVersion.select(0); UIUtil.createLabel(composite, "Project Organization:"); organization = new Text(composite, SWT.BORDER); organization.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); organization.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if (validate(organization, "Organization")) { configuration.setOrganization(organization.getText()); } } }); UIUtil.createLabel(composite, "Project Name:"); projectName = new Text(composite, SWT.BORDER); projectName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); projectName.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if (validate(projectName, "Project Name")) { configuration.setProjectName(projectName.getText()); } } }); UIUtil.createLabel(composite, "Product Version:"); productVersion = new Text(composite, SWT.BORDER); productVersion.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); productVersion.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if (validate(productVersion, "Product Version")) { configuration.setProductVersion(productVersion.getText()); } } }); productVersion.setText(configuration.getProductVersion()); setControl(composite); } private Composite createSbtSelectorPanel(Composite parent) { Composite group = new Composite(parent, SWT.NULL); group.setLayout(new RowLayout(SbtVersion.values().length)); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); sbtRadioButtons = new ArrayList<Button>(); for (final SbtVersion version : SbtVersion.values()) { Button sbtRadioButton = new Button(group, SWT.RADIO); sbtRadioButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { configuration.setSbtVersion(version); } }); sbtRadioButton.setText("sbt " + version.getPrefix()); sbtRadioButton.setData(version); if(version.equals(configuration.getSbtVersion())){ sbtRadioButton.setSelection(true); } sbtRadioButtons.add(sbtRadioButton); } return group; } private boolean validate(Text textField, String name) { if (textField.getText().length() == 0) { setErrorMessage(name + " is required."); setPageComplete(false); return false; } setErrorMessage(null); setPageComplete(true); return true; } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible == true && projectName.getText().length() == 0) { projectName.setText(mainPage.getProjectName()); } } }